﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace DataSharing
{
    public class MvcApplication : System.Web.HttpApplication
    {
        /// <summary>
        /// Chạy ngay sau khi ứng dụng khởi động
        /// </summary>
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

        /// <summary>
        /// Chạy ngay TRƯỚC khi ứng dụng shutdown
        /// </summary>
        protected void Appcation_End()
        {
        }

        /// <summary>
        /// Chạy ngay SAU khi 1 phiên làm việc bắt đầu
        /// </summary>
        protected void Session_Start()
        {
            // Nếu có Visitors trong Application -> tăng lên 1
            if (Application["Visitors"] != null)
            {
                long visitors = long.Parse(Application["Visitors"].ToString());
                Application["Visitors"] = visitors + 1;

                String path = Server.MapPath("~/Visitors.txt");
                System.IO.File.WriteAllText(path, Application["Visitors"].ToString());
            }
            // Nếu chưa có -> khởi tạo từ file Visitors.txt
            else
            {
                String path = Server.MapPath("~/Visitors.txt");
                Application["Visitors"] = System.IO.File.ReadAllText(path);
            }
        }

        /// <summary>
        /// Chạy ngay TRƯỚC khi 1 phiên làm việc hết hạn
        /// </summary>
        protected void Session_End()
        {
        }

        /// <summary>
        /// Chạy ngay TRƯỚC khi 1 Request gọi đến
        /// </summary>
        protected void Application_BeginRequest()
        {
            var uri = Request.Url.AbsoluteUri;
            if (!uri.Contains("__browserLink"))
            {
                Application.Lock();
                if (Application["HitCounters"] == null)
                {
                    var hits = new Hashtable();
                    hits.Add(uri, 1);
                    Application["HitCounters"] = hits;
                }
                else
                {
                    var hits = Application["HitCounters"] as Hashtable;
                    hits[uri] = Convert.ToInt32(hits[uri]) + 1;
                }
                Application.UnLock();
            }
        }

        /// <summary>
        /// Chạy ngay TRƯỚC khi 1 Request kết thúc
        /// </summary>
        protected void Application_EndRequest()
        {
        }
    }
}
